Ruby
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
top
Ruby est un langage de programmation libre. Il est interprété, orienté objet et multi-paradigme. Le langage a été standardisé au Japon en 2011 (JIS X 3017:2011)cite-ref-5[5], et en 2012 par l'Organisation internationale de normalisation (ISO 30170:2012)cite-ref-6[6].
Contents
• Exemples
• Notes
• Annexes
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
Historique
Yukihiro « Matz » Matsumoto est le créateur de Ruby. Frustré par son expérience en développement Smalltalk et Lisp, il commence la conception d'un nouveau langage en 1993 sous Emacs, puis publie une première version en 1995 sous licence libre. Il enchaîne depuis les nouvelles versions.
Depuis l'arrivée d'une documentation anglophone, et du framework web Ruby on Rails en 2004, Ruby a connu un certain engouement qui n'a cessé de croître jusqu'en 2008 dans le monde de la programmation, puis une érosion lente si on en juge par son index TIOBE.
Philosophie
Ruby est fortement orienté objet et se rapproche ainsi du paradigme objet de Smalltalkcite-ref-7[note 1] :
Fonctionnalités
Les fonctionnalités principales sont :
• l'orientation objet omniprésente ;
• le ramasse-miettes chargé de libérer automatiquement la mémoire ;
• le système de gestion d'exceptions pour gérer les erreurs exceptionnelles ;
• l'intégration dans sa syntaxe des expressions rationnelles ;
• les blocs qui servent d'itérateur et permettent de passer des morceaux de programme en paramètre ;
• l'héritage simple ;
• l'inclusion de modules dans les classes, une autre manière de concevoir l'héritage multiple (mixin) ;
• l'écriture d'extensions en C relativement simple ;
• les nombres entiers de taille illimitée avec conversion automatique lorsque c'est nécessaire ;
• la portée des variables définie par leur forme : var est une variable locale, @var est une variable d'instance, @@var est une variable de classe, $var est une variable globale, Var est une constante.
• les threads indépendants du système d'exploitation ;
• la réflexion, c'est-à-dire la possibilité pour les programmes et les objets de s'inspecter eux-mêmes et de se modifier.
Implémentations
L'interpréteur officiel, Ruby MRI, fonctionne sur de nombreux systèmes d'exploitation : UNIX, Linux, Microsoft Windows, MS-DOS, OS X, OS/2, ReactOS, AmigaOS, etc. Il est publié sous la double licence libre GNU GPL et la licence Rubycite-ref-9[8].
Ruby est fourni avec irb, un interpréteur de commandes interactif pour tester en profondeur le fonctionnement du langage. Il existe une version web d'irb pour tester Ruby dans un navigateurcite-ref-tryruby-10-0[9].
• JRubycite-ref-13[12] : il est écrit en Java et interprète directement du code source écrit en Ruby.
• XRuby : Il convertit du code Ruby en bytecode Java et est plus rapide sur certains tests de performance que la version 1.8.5 de l'interpréteur officielcite-ref-14[13].
• Rubinius : Une machine virtuelle simplifiée, inspirée de Smalltalk-80cite-ref-15[14], implémentée en Ruby même.
• Gardens Point Ruby.NET : Un interpréteur fonctionnant sur le framework .NETcite-ref-17[16].
• Ruby for .Net : un compilateur fonctionnant sur le CLR du framework .NET qui a été abandonnée au profit de IronRuby.
• MacRuby : implémentation de Ruby 1.9 spécifique à OS X, fonctionnant par-dessus le runtime Objective-Ccite-ref-19[18], permettant un usage natif des composants Cocoa, contrairement aux bindings RubyCocoa.
• Truffleruby : supporté et développé par Oracle, il s'agit d'une implémentation du langage Ruby sur la GraalVM, permettant des performances supérieures à MRIcite-ref-20[19].
Interprètes embarqués
Ruby possède une interface de programmation en langage C qui lui permet d'être intégré au sein d'autres logiciels. Ruby est notamment utilisable dans :
• et PostgreSQL avec PL/ruby pour faire exécuter des commandes Ruby au serveur de base de données.
Le logiciel de création de jeu vidéo RPG Maker intègre dans ses versions XP et VX une bibliothèque nommée RGSS, Ruby Game Scripting System permettant l'usage de scripts en Ruby.
Bibliothèques
Il existe de nombreuses bibliothèques de fonctionnalités adjoignables au langage. Le dépôt historique de ces bibliothèques est le Ruby Application Archive (RAA)cite-ref-21[20]. Il contient des fonctionnalités supplémentaires pour Ruby comme des bibliothèques de classes et de modules, mais aussi des extensions permettant d'utiliser des bibliothèques tierces.
Le RAA contient également des logiciels écrits en Ruby. Parmi ces logiciels on trouve notamment Rubygems qui est un outil d'empaquetage et d'installation pour les extensions Rubycite-ref-22[21]. Il permet de déployer rapidement des bibliothèques et des programmes Ruby.
La base de données de gems Rubygems est devenue avec le temps la référence en stockage de bibliothèques pour Ruby (plus de 49 milliards de téléchargementscite-ref-23[22]) au travers de l'outil Bundler (également développé en Ruby), les dépendances d'un projet sont téléchargées par défaut depuis Rubygems.
Exemples
Le classique Hello world :
puts 'Hello World!'
Utilisation des objets :
# Tout est objet, même les nombres:
-199.abs # 199
'ruby is cool'.length # 12
'Rick'.index 'c' # 2
"Nice Day Isn't It?".downcase.split(//).sort.uniq.join # " '?acdeinsty"
module AnimalSkills
def eat
puts "I'm eating !"
end
def move
puts "I'm moving !"
end
def express; puts "I'm expressing !" end
end
class Animal
include AnimalSkills # mixin
@@name = 'an animal' # variable de classe
def initialize(size, weight, color) # initialisation des variables d'instance
@size = size.to_i
@weight, @color = weight.to_i, color.to_s
end
def describe
puts "I'm #{@@name} !"
puts "I'm #{@size} meter tall, I weigh #{@weight} kilograms and I'm " + @color
end
end
class Zebra < Animal # héritage
@@name = 'a zebra' # rédéfinition de la variable de classe: maintenant tous les animaux sont des zèbres !
def initialize(size, weight, color = 'black and white') # surcharge
super # appel de la méthode de la classe mère (Animal)
end
end
z = Zebra.new(1, 50)
z.describe # => I'm a zebra ! / I'm 1 meter tall, I weigh 50 kilograms and I'm black and white
z.eat # => I'm eating !
Notes et références
Notes
cite-note-7note 1. ↑ La principale différence étant que les structures de contrôle (if-then-else, while, etc.) ne sont pas des objets.
Références
cite-note-wikidata-4bbe1c7e80216b08754fc0b8cbad510a668fe2de-11. « Ruby 3.4.7 Released », 7 octobre 2025 (consulté le 29 octobre 2025)
cite-note-22. Intro – D Programming Language 1.0 – Digital Mars.
cite-note-wikidata-ee7af8d0e4d0fc98cf7edc7abc6cdb53c10b565e-33. « https://www.ruby-lang.org/ja/news/2013/06/30/we-retire-1-8-7/ »
cite-note-wikidata-76b8b08edbf42cecb0f0d32e32d6b28a4e94490a-44. « https://www.ruby-lang.org/ja/news/2011/10/31/ruby-1-9-3-p0-is-released/ »
cite-note-55. ↑ JIS X 3017:2011 - Programming languages - Ruby.
cite-note-66. ↑ ISO/IEC 30170:2012 Information technology - Programming languages - Ruby.
cite-note-87. ↑ (en) Ruby sur HOPL, the History of Programming Languages.
cite-note-98. ↑ Texte de la licence sur le site officiel.
cite-note-tryruby-109. ↑ (en) Try Ruby! sur hobix.com.
cite-note-1110. ↑ (en) The Ruby VM: Episode I, interview de matz et de ko1 sur la machine virtuelle de Ruby.
cite-note-ruby-implementations-shootout-1211. (en) The Great Ruby Shootout, comparaison des performances des principaux interpréteurs Ruby.
cite-note-1312. ↑ Site officiel de JRuby
cite-note-1413. ↑ (en) XRuby is faster than Ruby 1.8.5 in most benchmarks.
cite-note-1514. ↑ (en) Rubinius Interview.
cite-note-1615. ↑ Site du projet Cardinal.
cite-note-1716. ↑ (en) Ruby.NET - Integrating the Gardens Point Compiler par Huw Collingbourne.
cite-note-1817. ↑ (en) http://www.ironruby.net/.
cite-note-1918. ↑ (en) Site officiel de MacRuby.
cite-note-2019. ↑ pragtob2017(en) PragTob, « Benchmarking a Go AI in Ruby: CRuby vs. Rubinius vs. JRuby vs. Truffle – a year later », sur Journeys of a not so young anymore Software Engineer, 24 janvier 2017 (consulté le 4 avril 2020)
cite-note-2120. ↑ Ruby Application Archive.
cite-note-2221. ↑ Site officiel de Rubygems.
cite-note-2322. ↑ « RubyGems.org | votre communauté d'hébergement des gems », sur rubygems.org (consulté le 3 avril 2020)
Annexes
Bibliographie
• dave-thomasandrew-hunt2000(en) Dave Thomas et Andrew Hunt, Programming Ruby : The Pragmatic Programmer's Guide, 2000, 564 p. (ISBN 0-201-71089-7, lire en ligne)
• yukihiro-matsumoto2002Yukihiro Matsumoto (trad. de l'anglais), Ruby in a Nutshell, Cambridge/Cologne/Paris etc., O'Reilly, 2002, 242 p. (ISBN 2-84177-210-1)
• thomas2004dave-thomas2004(en) Dave Thomas, Chad Fowler et Andy Hunt, Programming Ruby : The Pragmatic Programmer's Guide, 2004 (ISBN 0-9745140-5-5)
• chris-pine2006Chris Pine (trad. de l'anglais), Débuter en Programmation avec Ruby, Paris, CampusPress, 2006, 165 p. (ISBN 2-7440-2078-8)
• lucas-carlsonleonard-richardson2006Lucas Carlson et Leonard Richardson, Ruby par l'exemple, 2006, 867 p. (ISBN 978-2-84177-347-3)
• 2006(en) Hal Fulton, The Ruby Way, Second Edition : Solutions and Techniques in Ruby Programming (2nd Edition), 2006 (ISBN 0-672-32884-4)
• 2006(en) Maik Schmidt, Enterprise Integration with Ruby : A Pragmatic Guide, 2006, 346 p. (ISBN 0-9766940-6-9)
• 2007(en) Brian Marick, Everyday Scripting with Ruby : For Teams, Testers, and You, 2007, 301 p. (ISBN 978-0-9776166-1-9)
• peter-cooper2007(en) Peter Cooper, Beginning Ruby : From Novice to Professional, 2007 (ISBN 978-1-59059-766-8)
Articles connexes
Liens externes
• site-officiel(en) Site officiel
• (fr) Human Coders News - Ruby
• (fr) Ruby-GNOME2
• Portail de l’informatique
• Portail des logiciels libres
• Portail de la programmation informatique